﻿using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;

namespace themovieproduction.siniflar
{
    public class uyeler : System.Web.UI.Page
    {

        
        //--------- Kullanicinin ilişkilendırilmesı ıcın gereklı olan ID bilgileri 
        public int kullaniciID { get; set; }
        public int hesaptipi { get; set; } // ucretli ucretsiz uyelik veya firmaya aitlik durumlarini denetlemek icin gerekli degisken
        public int firmaID { get; set; }  // bir firmaya ait ise bu firmanin idsini alicak yoksa global firmaya kendisini taniticak
        public int roleID { get; set; }    // senarist veya yonetmen gibi kullanicinin tipini belirlemeye yarayacak olan roleidsi
        public int yetkiID { get; set; }    // burada kullanicinin erisim yetkileri denetlencek




        //-----------------   Kullanicinin kisisel bilgilerini iceren degisken gurubu


        private string kullanici_adi { get; set; }
        private string parola { get; set; }

        public string dogumyeri { get; set; }
        public string email { get; set; }
        public string adres { get; set; }
        public string telefon { get; set; }
        public string isim_soyisim { get; set; }
        public string profilkelimeler { get; set; }
        public string avataryolu { get; set; }
        public DateTime dogumtarihi { get; set; }
        public DateTime uyeliktarihi { get; set; }
        public string yets { get; set; }




        //------------------  Kullanicinin Log kayitlarini denetlemek icin gereken degisken seti

        private DateTime songiristarihi { get; set; }
        private DateTime soncikistarihi { get; set; }
        private string songirisIP { get; set; }
        private string sessionID { get; set; }

        public string setKullaniciadi { get { return kullanici_adi; } set { kullanici_adi = injeksyonkontrol(value); } }
        public string setParola { get { return parola; } set { parola = injeksyonkontrol(value); } }
        //-----------------  Kullaniclarin  giris ve dger islemleri icin yapacagi metodlar
        public static string injeksyonkontrol(string parametre)
        {

            // injeksyon kontrollerinden gecirilmis string dondurur
            return parametre;
        }

        public int giris()
        {
            // kullanici adi ve parola denetlemesi
            // 2 katmanla asimetrik birlestiriliyor

            // stored procedure ile giris denetelnecek giris yaptigi tarihe ait bilgiler ve ip adresleride log tablolarina  
            // kaydedilecek
            MySqlConnection sqlcon= connection.baglanti2;
            MySqlCommand sqlcmd= new MySqlCommand("login",sqlcon);
            sqlcmd.Parameters.AddWithValue("@username",kullanici_adi);
            sqlcmd.Parameters.AddWithValue("@password",context.asimetrik(context.asimetrik(parola)));
            sqlcmd.Parameters.AddWithValue("@IP",songirisIP);

            MySqlParameter durum = new MySqlParameter("@durum",MySqlDbType.Bit);
            MySqlParameter kullaniciID = new MySqlParameter("@kullaniciID",MySqlDbType.Int32);
            MySqlParameter yetki = new MySqlParameter("@role", MySqlDbType.Byte);

            durum.Direction = ParameterDirection.Output;
            kullaniciID.Direction = ParameterDirection.Output;
            yetki.Direction = ParameterDirection.Output;
            sqlcmd.Parameters.Add(durum);
            sqlcmd.Parameters.Add(kullaniciID);
            sqlcmd.Parameters.Add(yetki);
            sqlcmd.CommandType = CommandType.StoredProcedure;
            sqlcon.Open();
            int passdurum = Convert.ToInt32(sqlcmd.Parameters["@durum"].Value);
            Session["kullaniciID"]= Convert.ToInt32(sqlcmd.Parameters["@kullaniciID"].Value);            
            Session["yetki"]= Convert.ToInt32(sqlcmd.Parameters["@yetki"].Value);
            sqlcon.Close();

            return passdurum;
            }

            // kullanicidan gelen datalarin gerekli sessionlara aktarilamsi

            // Kullanicidan gelen datalarin aktarilacagi cookilerin belirlenmesi

            // kullanicidan gelen datalara gore routing sileminin yaplmasi 
        

        // kullanicinin tum bilgilerini set edilmesini saglayan metod 
        public void kullanicidataset()
        {

            MySqlConnection con = connection.baglanti2;
            MySqlCommand cmd = new MySqlCommand("select * from  kullanicilar where kullaniciID=@kid",con);
            cmd.Parameters.AddWithValue("@kid",Session["kullaniciID"]);
            con.Open();

            MySqlDataReader sdr = cmd.ExecuteReader();
            while (sdr.Read())
            {
                // databaseden gelen gerekli datalari burada listeleyec


            }

            con.Close();
        }

        // kullanici kaydi yapan metod  procedure ile  email denetlemeside yapiyor dondordugu duruma gore anliyoruz
        public int kullanicikayit()
        {
            MySqlConnection con = connection.baglanti2;
            MySqlCommand cmd = new MySqlCommand("register",con); // login isimli stoped procedure cagiriliyor
            cmd.Parameters.AddWithValue("@email",email);
            cmd.Parameters.AddWithValue("@parola",parola);

            MySqlParameter parameter = new MySqlParameter("@statu", MySqlDbType.Bit);
            parameter.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(parameter);
            cmd.CommandType = CommandType.StoredProcedure;

            con.Open();

            int durum = Convert.ToInt32(cmd.Parameters["@statu"].Value);
            con.Close();

            return durum;
            //stored proc kullanmaliyiz donen degeregore durum denetimi yapilmali
        }

        // kullanicinin email kaydini denetleyen metod  ajax ile kullanilacak olan metod
        public static bool emailkontrol(string email)
        {
            MySqlConnection con = connection.baglanti2;
            MySqlCommand cmd = new MySqlCommand("select * from kullanicilar where kullaniciadi=@kad", con);
            cmd.Parameters.AddWithValue("@kad", email);
            con.Open();
            MySqlDataReader sdr = cmd.ExecuteReader();

            if (sdr.Read())
            {   con.Close();
                return false;
            }
            else
            {
                con.Close();
                return true;
            }

            ;
        }

        // kullanicinn parola seviyesini denetleyen metod
        public void kuki_denetleme(HttpCookie kuki)
        {
            // sistemin giris islemleri ile ilgili tum kuki denetlemeleri bu metod ile yapilcak
            if (kuki != null)
            {
                string kulpass = context.decrypte(kuki.Values.ToString());
                string[] kulpasdizi = kulpass.Split('|');
                this.setKullaniciadi = context.decrypte(kulpasdizi[0]);
                this.setParola = context.decrypte(kulpasdizi[1]);

                giris();
            }


        }

        public HttpCookie kuki_yarat()
        {
            string deger = context.encrypte(context.encrypte(kullanici_adi) + '|' + context.encrypte(parola));
            HttpCookie kuki = new HttpCookie("kullpass", deger);
            kuki.Expires = DateTime.Now.AddMinutes(60 * 24 * 365 );

            return kuki;
        }

        public string yetki()
        {
            string url = "index.aspx";
            switch (Session["yetki"].ToString())
            {

                case "admin-project":
                    return "url";
                    break;

                case "spv-project":
                    return "url";
                    break;
                default:
                    return "index.aspx";
                    break;
            }

            return url;
        }


        



    }
}